<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // // 从左往右 从上往下
        // // 预解析
        // console.log(a);
        // var a = 1;
        
        // fn();
        // function fn(){
        //     console.log(123)
        // }

        // // this的指向情况太多 apply,call,bind....

        // 块有三种情况：指的是花括号（大括号）
        // 如果用的是var，块没有自己的作用域

        // {

        // }

        // if(true){

        // }

        // for(){

        // }

        // 要么会报错
        // 要么结果是1
        // {
        //     var a = 1;
        // }
        // console.log(a);


        // 函数作用域
        // function fn(){
        //     var a = 1;//当前函数局部作用域
        // }
        // fn();
        // console.log(a);//全局


        // if(true){
        //     var a = 1;
        // }
        // console.log(a);


        // for(var i=1;i<2;i++){

        // }
        // console.log(i);


        // 我们之前定义变量用的是var,它不存在块级作用域


        // let + 花括号就会形成块级作用域

        // {
        //     let a = 1;//属于当前块级作用域，不属于全局
        // }
        // console.log(a);


        // if(true){
        //     let a = 1;
        // }
        // console.log(a);


        // for(let i=0;i<2;i++){

        // }
        // console.log(i);

        
        // let a = 2;
        // console.log(a);//预解析 变量提升 反人性 先有一个东西，你才能用


        // 指腹为婚
        // 老王 21岁 来杭州了，认识了一个美女，不行，因为在老家的时候家里人说了我给你安排了一个老婆，25岁 的时候
        // 娶她

        // 真空状态

        // 21-25岁 暂时性死区


        // var a = 1;//全局
        // if(true){
        //     console.log(a);//不存在变量提升 预解析 1 暂存性死区 TDZ temp dead zone 尴尬
        //     let a = 100;
        // }

        // 一个班 28个人 四个组 7个人 
        // 小明 
        // A组 7个人 小明 不在我们这个组 

        // 班主任 明天的时候会来一个人，去A组，名字就叫小明 


        // var 考试：先把整个卷子全部看一遍 然后确定哪此比较难，做题
        // let 考试：直接考 从第1题

        // let a = 1;
        // let a = 2;
        // console.log(a);

        // let i = 0;
        // 产生二个块级作用域
        // for(let i=0;i<2;i++){
        //     console.log(i);
        // }

        // // 等价于下面的代码：

        // // 上面这个for循环会产生二个块级作用域
        // {
        //     let i = 0;
        //     console.log(i);
        // }

        // {
        //     let i = 1;
        //     console.log(i);
        // }



        // function fn(){
        //     var a = 1;
        //     a++;
        // }
        // for(var i=0;i<2;i++){
        //     fn()//函数执行几次就会产生几个函数级作用域
        // }


        let arr = [];
        
        {
            let i = 0;
            arr[0] = function(){
                console.log(i);//0
            }
        }

        {
            let i = 1;
            arr[1] = function(){
                console.log(i);//1
            }
        }

        // {
        //     let i = 2;
        //     //什么都没做
        // }


        arr[0]();
        arr[1]();

    
    </script>
</body>
</html>